# 首页静态化
import os
if not os.getenv('DJANGO_SETTINGS_MODULE'):
    os.environ['DJANGO_SETTINGS_MODULE'] = 'meiduo_mall.settings.dev'

import django
django.setup()
from collections import OrderedDict
from django.template import loader
from django.conf import settings

from goods.models import ContentCategory
from meiduo_mall.apps.content.utils import get_categories
"""
使用当前的方法可以直接ｒｕｎ该ｐｙ文件生成静态文件，但是导入13行的方法必须用从绝对路径导入
"""


def generate_static_index_html():
    """生成静态化首页方法"""
    # 查询数据
    categories_dict = get_categories()
    # 创建广告字典
    contents_dict = OrderedDict()
    # 获取广告种类对象列表
    contents_category_list = ContentCategory.objects.all()
    # 遍历广告种类列表
    for contents_category in contents_category_list:
        # 取出该对象的所有要展示的广告
        # 构建数据
        contents_dict[contents_category.key] = [
            {
                'title': content.title,
                'url': content.url,
                'image': content.image,
                'text': content.text
            }
            for content in contents_category.content_set.filter(status=True).order_by('sequence')
        ]
    # 构造上下文
    context = {
        'categories': categories_dict,
        'contents': contents_dict
    }

    # 加载模板文件
    """
    跟踪源码，EngineHandler这个类实现了迭代器方法，该迭代器迭代的是template方法，该方法将类中的_template属性赋值为配置文件中的template
    """
    template = loader.get_template('index.html')

    # 渲染模板
    html_text = template.render(context)

    # 写静态文件
    with open(os.path.join(settings.STATICFILES_DIRS[0], 'index.html'), 'w', encoding='utf-8') as f:
        f.write(html_text)


if __name__ == '__main__':
    generate_static_index_html()

